package leetcode_jz_offer;

/**
 * @author 美女
 * @date 2022/08/15 12:05
 **/
public class Num67_字符串转换为整数 {
    public int strToInt(String str) {
        //去除两边空格并转化为字符串数组
        char[] array=str.trim().toCharArray();
        if(array.length==0){
            return 0;
        }
        //最大数字2147483647除以10：是否越界有两个可能，一个是10*214748365直接越界，一个是10*214748364+9越界【10*res+x】
        int bndry = Integer.MAX_VALUE / 10;
        //索引位
        int i=1;
        //符号位
        int sign=1;
        //总值
        int res=0;
        if(array[0]=='-'){//首位为负号
            sign=-1;
        }else if(array[0]!='+'){//首位不是’+‘也不是’-‘，将索引归到0位置去循环里判断是数字还是其他符号
            i=0;
        }
        for (int j = i; j < array.length; j++) {
            //判断当前是否字符
            if(array[j]<'0'||array[j]>'9'){//当前位不是正负号与数字，不必再计算直接返回【注意题目中特殊符号不影响数字】
                break;
            }
            //判断数字res越界情况
            if(res>bndry||(res==bndry&&array[j]>'7')){
                //正数越界返回最大值，负数返回最小值
                return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
            }
            //此时当前字符是数字且未越界
            res=res*10+(array[j]-'0');
        }
        return sign*res;//带符号位
    }
}
